﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using Biblioteca.Utils;
using System.Data.Common;
using Biblioteca.DataBase;
using Pms.Utils;
using SERIX.Util;

namespace SERIX
{

    public class CriteriosPesquisaQuestionario : CriteriosPesquisa
    {
        public string MestrePropriedade { get; set; }
    }

    public partial class Questionarios : Seguranca
    {
        string _idt_prop = "";
        string _idt_benef = "";
        string _idt_vinc_prop = "";
        string _seq_vinc = "";
        string _filtro = "";
        char _perm_preencher;

        CriteriosPesquisaQuestionario criteriosPesquisa;

        protected void Page_Load(object sender, EventArgs e)
        {
            base.OnLoad(e);
            btnNovo.Enabled = PermissaoManut.Equals(Constantes.PERM_MANUTENCAO);
            Session["RetornoQuest"] = null;

            _perm_preencher = BiblioPMS.VerifiquePermissao("PREENCHERQUESTIONARIO.ASPX", BiblioPMS.aplicacaoSNG, UsuAut.Login);

            InicializarCriteriosPesquisa();
            //Mestre
            if (!String.IsNullOrEmpty(Request["idt_prop"]) && !String.IsNullOrEmpty(Request["idt_benef"]) && !String.IsNullOrEmpty(Request["idt_vinc_prop"]) && !String.IsNullOrEmpty(Request["seq_vinc"]))
            {
                _idt_prop = Server.UrlDecode(Criptografia.Descriptografar(Request["idt_prop"]));
                _idt_benef = Server.UrlDecode(Criptografia.Descriptografar(Request["idt_benef"]));
                _idt_vinc_prop = Server.UrlDecode(Criptografia.Descriptografar(Request["idt_vinc_prop"]));
                _seq_vinc = Server.UrlDecode(Criptografia.Descriptografar(Request["seq_vinc"]));
                _filtro = "&idt_prop_mestre=" + Server.UrlEncode(Request["idt_prop"]) +
                          "&idt_benef_mestre=" + Server.UrlEncode(Request["idt_benef"]) +
                          "&idt_vinc_prop_mestre=" + Server.UrlEncode(Request["idt_vinc_prop"]) +
                          "&seq_vinc_mestre=" + Server.UrlEncode(Request["seq_vinc"]);
            }
            else if (criteriosPesquisa != null && !string.IsNullOrEmpty(criteriosPesquisa.MestrePropriedade))
            {
                string[] parametros = criteriosPesquisa.MestrePropriedade.Split(';');
                _idt_prop = parametros[0];
                _idt_benef = parametros[1];
                _idt_vinc_prop = parametros[2];
                _seq_vinc = parametros[3];
                _filtro = "&idt_prop_mestre=" + Server.UrlEncode(Criptografia.Criptografar(_idt_prop)) +
                          "&idt_benef_mestre=" + Server.UrlEncode(Criptografia.Criptografar(_idt_benef)) +
                          "&idt_vinc_prop_mestre=" + Server.UrlEncode(Criptografia.Criptografar(_idt_vinc_prop)) +
                          "&seq_vinc_mestre=" + Server.UrlEncode(Criptografia.Criptografar(_seq_vinc));
            }

            if (!RestaurarPesquisa() && !Page.IsPostBack)
            {
                SalvarPesquisa();
                Navegador1.CarregueBotoes(0);
                Pesquisar();
            }
            else if (!string.IsNullOrEmpty(_idt_prop))
            {
                SalvarPesquisa();
            }
            Navegador1.Pesquisar += new SERIX.Controles.Navegador.PesquisarDelegate(Pesquisar);
            txtFiltrar.Focus();
        }

        private void InicializarCriteriosPesquisa()
        {
            criteriosPesquisa = (CriteriosPesquisaQuestionario)Session[Page.ToString()];
        }

        private void SalvarPesquisa()
        {
            if (criteriosPesquisa == null)
            {
                criteriosPesquisa = new CriteriosPesquisaQuestionario() { FiltroSimples = txtFiltrar.Text, PaginaAtual = 1, MestrePropriedade = _idt_prop+';'+_idt_benef+';'+_idt_vinc_prop+';'+_seq_vinc };
                Session[Page.ToString()] = criteriosPesquisa;
            }
            else
            {
                criteriosPesquisa.FiltroSimples = txtFiltrar.Text;
                criteriosPesquisa.MestrePropriedade = _idt_prop + ';' + _idt_benef + ';' + _idt_vinc_prop + ';' + _seq_vinc;
            }
        }

        private bool RestaurarPesquisa()
        {
            string chave = _idt_prop + ';' + _idt_benef + ';' + _idt_vinc_prop + ';' + _seq_vinc;
            if (!IsPostBack && criteriosPesquisa != null)
            {
                if (string.IsNullOrEmpty(_idt_prop) && !string.IsNullOrEmpty(criteriosPesquisa.MestrePropriedade))
                {
                    _idt_prop = criteriosPesquisa.MestrePropriedade;
                    _filtro = "&idt_ter=" + Server.UrlEncode(Criptografia.Criptografar(criteriosPesquisa.MestrePropriedade));
                }
                else if (!string.IsNullOrEmpty(criteriosPesquisa.MestrePropriedade) && chave != criteriosPesquisa.MestrePropriedade)
                {
                    criteriosPesquisa.PaginaAtual = 1;
                    criteriosPesquisa.FiltroSimples = "";
                    criteriosPesquisa.MestrePropriedade = "";
                }
                txtFiltrar.Text = criteriosPesquisa.FiltroSimples;
                Pesquisar();
                return true;
            }
            return false;
        }

        /// <summary>
        /// M?todo que trata o recebimento do parametro do mestre
        /// </summary>
        /// <returns></returns>
        private string MestreDetalhe(string tag)
        {
            string filtro = "";
            if (!String.IsNullOrEmpty(Request["idt_prop"]) && !String.IsNullOrEmpty(Request["idt_benef"]) && !String.IsNullOrEmpty(Request["idt_vinc_prop"]) && !String.IsNullOrEmpty(Request["seq_vinc"]))
            {
                filtro = " " + tag + " idt_prop = " + Server.UrlDecode(Criptografia.Descriptografar(Request["idt_prop"])) +
                        " and idt_benef = " + Server.UrlDecode(Criptografia.Descriptografar(Request["idt_benef"])) +
                        " and idt_vinc_prop = " + Server.UrlDecode(Criptografia.Descriptografar(Request["idt_vinc_prop"])) +
                        " and seq_vinc = " + Server.UrlDecode(Criptografia.Descriptografar(Request["seq_vinc"])) + " ";
                trMestre.Visible = true;
                string idt_prop = Server.UrlDecode(Criptografia.Descriptografar(Request["idt_prop"]));
                string idt_benef = Server.UrlDecode(Criptografia.Descriptografar(Request["idt_benef"]));
                string idt_vinc_prop = Server.UrlDecode(Criptografia.Descriptografar(Request["idt_vinc_prop"]));
                string seq_vinc = Server.UrlDecode(Criptografia.Descriptografar(Request["seq_vinc"]));
                CVinculosPropriedades mestre = CVinculosPropriedades.PesquisaporCodigo(idt_prop, idt_benef, idt_vinc_prop, seq_vinc, UsuAut.Login);
                CPropriedades prop = CPropriedades.PesquisaporCodigo(idt_prop, UsuAut.Login, false);
                CBeneficiarios benef = CBeneficiarios.PesquisaporCodigo(idt_benef, UsuAut.Login, false);
                lbMestreBeneficiario.Text = benef.Nom_benef;
                lbMestrePropriedade.Text = prop.Nome_prop;
            }
            else
            {
                trMestre.Visible = false;
            };
            return filtro;
        }

        protected void Todos()
        {

            lblFiltro.Text = "Filtro:";
            txtFiltrar.Text = "";
            string filtro = "";
            filtro = MestreDetalhe("where");
            string SQL = @" SELECT idt_qst, idt_prop, idt_benef, idt_vinc_prop, seq_vinc, q.idt_tiq,
                                   to_char(dat_qst,'dd/MM/yyyy') dat_qst, t.dsc_tiq
                              FROM Serix.SRX_QUESTIONARIOS q join Serix.Srx_Tipos_Questionarios t on (q.idt_tiq = t.idt_tiq) " +
                            filtro + " order by dsc_tiq";

            QueryPaginada qy = null;
            try
            {
                qy = new QueryPaginada(BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, UsuAut.Login, BiblioPMS.Demo), SQL, BiblioSERIX.tamPag);
                gridView.DataSource = qy.Executar(criteriosPesquisa.PaginaAtual);
                gridView.DataBind();
                Navegador1.CarregueBotoes(qy.QtdLinhas());
            }
            catch
            {
                if (qy.EstadoConexao() == ConnectionState.Open)
                    qy.FecharConexao();
            }
            finally
            {
                if (qy.EstadoConexao() == ConnectionState.Open)
                    qy.FecharConexao();
            }
        }

        protected void Pesquisar()
        {

            QueryPaginada qy = null;
            try
            {
                //Se o filtro nao estiver vazio 
                if (!String.IsNullOrEmpty(txtFiltrar.Text) || (!String.IsNullOrEmpty(Request["idt_prop"]) && !String.IsNullOrEmpty(Request["idt_benef"]) && !String.IsNullOrEmpty(Request["idt_vinc_prop"]) && !String.IsNullOrEmpty(Request["seq_vinc"])))
                {
                    string filtro = "";
                    filtro = MestreDetalhe("and");


                    string filtro_descricao = "";
                    if (txtFiltrar.Text != "")
                    {
                        filtro_descricao = " Descrição = \"" + txtFiltrar.Text + "\"";
                    }
                    lblFiltro.Text = "Filtro:" + filtro_descricao;

                    string SQL = @" SELECT idt_qst, idt_prop, idt_benef, idt_vinc_prop, seq_vinc, q.idt_tiq,
                                           to_char(dat_qst,'dd/MM/yyyy') dat_qst, t.dsc_tiq
                                      FROM Serix.SRX_QUESTIONARIOS q join Serix.Srx_Tipos_Questionarios t on (q.idt_tiq = t.idt_tiq)
                                     WHERE UPPER(t.dsc_tiq) LIKE '%' || UPPER(:dsc_tiq) || '%' " +
                                     filtro + " order by DAT_QST";
                    try
                    {
                        qy = new QueryPaginada(BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, UsuAut.Login, BiblioPMS.Demo), SQL, BiblioSERIX.tamPag);
                        qy.AdicionarParametro("dsc_tiq", DbType.String, txtFiltrar.Text);
                        gridView.DataSource = qy.Executar(criteriosPesquisa.PaginaAtual);
                        gridView.DataBind();
                        Navegador1.CarregueBotoes(qy.QtdLinhas());
                    }
                    catch
                    {
                        if (qy.EstadoConexao() == ConnectionState.Open)
                            qy.FecharConexao();
                        Todos();
                    }
                    finally
                    {
                        if (qy.EstadoConexao() == ConnectionState.Open)
                            qy.FecharConexao();
                    }
                }
                else
                    //Caso o filtro esteja vazio, mostre todos
                    Todos();
            }
            catch
            //Em caso de erro, mostra todos as unidades
            {
                if (qy.EstadoConexao() == ConnectionState.Open)
                    qy.FecharConexao();
                Todos();
            }
        }

        protected void btnNovo_Click(object sender, EventArgs e)
        {
            Response.Redirect("QuestionariosManut.aspx?OP=I" + _filtro);
        }

        protected void btnPequisar_Click(object sender, EventArgs e)
        {
            criteriosPesquisa.PaginaAtual = 1;
            Pesquisar();
            SalvarPesquisa();
        }

        protected void btnTodos_Click(object sender, EventArgs e)
        {
            criteriosPesquisa.PaginaAtual = 1;
            Todos();
            SalvarPesquisa();
        }

        protected void gridView_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                string IDT_QST = ((DbDataRecord)e.Row.DataItem)["IDT_QST"].ToString();
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 3].Controls[1]).NavigateUrl = "PreencherQuestionario.aspx?op=C&idt_qst=" + Server.UrlEncode(Criptografia.Criptografar(IDT_QST)) + _filtro;
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 2].Controls[1]).NavigateUrl = "PreencherQuestionario.aspx?op=U&idt_qst=" + Server.UrlEncode(Criptografia.Criptografar(IDT_QST)) + _filtro;
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 1].Controls[1]).NavigateUrl = "QuestionariosManut.aspx?OP=DATANASC_CONJUGE&idt_qst=" + Server.UrlEncode(Criptografia.Criptografar(IDT_QST)) + _filtro + "&origem=Q";
                //Segurança
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 3].Controls[1]).Enabled = !PermissaoManut.Equals(Constantes.PERM_NEGADA);
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 2].Controls[1]).Enabled = PermissaoManut.Equals(Constantes.PERM_MANUTENCAO);
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 1].Controls[1]).Enabled = PermissaoManut.Equals(Constantes.PERM_MANUTENCAO);

                if (Session["RetornoQuest"] == null)
                {
                    string idt_prop = ((DbDataRecord)e.Row.DataItem)["idt_prop"].ToString();
                    string idt_benef = ((DbDataRecord)e.Row.DataItem)["idt_benef"].ToString();
                    string idt_vinc_prop = ((DbDataRecord)e.Row.DataItem)["idt_vinc_prop"].ToString();
                    string seq_vinc = ((DbDataRecord)e.Row.DataItem)["seq_vinc"].ToString();
                    Session["RetornoQuest"] = "~/Questionarios.aspx?idt_prop=" + Server.UrlEncode(Criptografia.Criptografar(idt_prop)) +
                                  "&idt_benef=" + Server.UrlEncode(Criptografia.Criptografar(idt_benef)) +
                                  "&idt_vinc_prop=" + Server.UrlEncode(Criptografia.Criptografar(idt_vinc_prop)) +
                                  "&seq_vinc=" + Server.UrlEncode(Criptografia.Criptografar(seq_vinc));
                }

            }
            else
            {
                //Controle de retorno do Preencher Questionario


            }
        }

    }
}

